#封装
#面向对象的三大特性 封装,继承,多态
#封装: 隐藏不希望被外部访问到属性和方法
#隐藏属性(私有权限) 只能在类的内部被使用,不能被对象所调用 子类不会继承 前面加两个下划线__
#隐藏属性只是python将属性名改为了 _类名__属性名 通过._类名__属性名还是可以被调用的 不推荐使用这种方法
class User:
    __type = "英雄"
    def __init__(self, name, age,weapon):
        self.name = name
        self.age = age
        self.weapon = weapon
    def attack(self):
        print(f"{self.name}使用{self.weapon}进行了一次攻击")
    def __del__(self):
        print(f"种类:{self.__type} {self.name}被击杀了")
user1 = User("格温",17,"剪刀")
user1.attack()
user2 = User("星蝶",16,"魔法杖")
user2.attack()
print(user2.name+"被销毁了")
# print(user1.__type) 无法访问到
print(user1._User__type) #可以访问到 不推荐使用这种方法
del user2
print("程序最后一条代码,游戏结束")
#私有属性/方法 用单下划线开头_
#如果定义在类中,外部可以直接使用,也可被继承 但无法在其他.py文件通过 from xxx import * 导入
#一般是为了避免与python的关键字冲突所定义的命名方法
#隐藏和私有一般自己不要随便定义
